Skip to content

feat(Keycard): Adding a keycard info drawer for Android to guide the keycard interactions#19549

Merged
alexjba merged 8 commits intofix/keycard-nfc-3from
fix/keycard-nfc-4
Jan 14, 2026
Merged

feat(Keycard): Adding a keycard info drawer for Android to guide the keycard interactions#19549
alexjba merged 8 commits intofix/keycard-nfc-3from
fix/keycard-nfc-4

Conversation

@alexjba
Copy link
Copy Markdown
Contributor

@alexjba alexjba commented Dec 10, 2025

What does the PR do

Iterating
#19545
#19546
#19547
#19548

Adding a KeycardChannelDrawer that's guiding the user whenever the keycard is needed.

On IOS the system drawer is used.

Screencapture of the functionality

Screen_Recording_20251210_154214_Status.mp4
ScreenRecording_12-10-2025.17-21-13_1.MP4
Screen.Recording.2025-12-10.at.15.11.49.mov

Impact on end user

How to test

desktop:
make run USE_STATUS_KEYCARD_QT=1
iOS:
make mobile-run USE_STATUS_KEYCARD_QT=1 DEVELOPMENT_TEAM=...
android:
make mobile-run

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@alexjba alexjba marked this pull request as ready for review December 10, 2025 16:40
@alexjba alexjba requested review from a team, caybro, micieslak and noeliaSD as code owners December 10, 2025 16:40
@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

✔️ status-desktop/e2e/prspr19549 🔹 ~17 min 🔹 7515f6e 🔹 📦 tests/e2e package

@alexjba alexjba requested a review from a team as a code owner December 11, 2025 08:13
@alexjba alexjba requested review from friofry and vkjr and removed request for a team December 11, 2025 08:13
@alexjba alexjba requested a review from a team as a code owner December 22, 2025 08:42
@status-im-auto
Copy link
Copy Markdown
Member

status-im-auto commented Dec 22, 2025

Jenkins Builds

Click to see older builds (96)
Commit #️⃣ Finished (UTC) Duration Platform Result
23b6c55 #1 2025-12-10 11:50:38 ~6 min macos/aarch64-nwaku 📄log
23b6c55 #1 2025-12-10 11:51:05 ~6 min macos/aarch64 📄log
23b6c55 #1 2025-12-10 11:52:00 ~8 min android/arm64 📄log
23b6c55 #1 2025-12-10 11:54:05 ~10 min ios/aarch64 📄log
✔️ 23b6c55 #1 2025-12-10 11:56:24 ~12 min tests/nim 📄log
✔️ 23b6c55 #1 2025-12-10 12:03:14 ~19 min tests/ui 📄log
✔️ 23b6c55 #1 2025-12-10 12:05:20 ~21 min linux/x86_64 📦tgz
✔️ 23b6c55 #1 2025-12-10 12:08:15 ~24 min linux/x86_64-nwaku 📦tgz
✔️ 23b6c55 #1 2025-12-10 12:17:04 ~32 min windows/x86_64 💿exe
✖️ 23b6c55 pr19549 2025-12-10 12:23:25 ~17 min tests/e2e 📊rpt
✖️ 23b6c55 PR19549 2025-12-10 12:45:51 ~28 min tests/e2e-windows 📊rpt
7515f6e #2 2025-12-10 16:24:42 ~14 min windows/x86_64 📄log
✖️ 7515f6e #2 2025-12-10 16:30:52 ~21 min ios/aarch64 📱ipa
7515f6e #2 2025-12-10 16:35:12 ~25 min macos/aarch64-nwaku 📄log
✔️ 7515f6e #2 2025-12-10 16:38:44 ~29 min android/arm64 🤖apk 📲
✔️ 7515f6e #2 2025-12-10 16:40:26 ~30 min tests/nim 📄log
✔️ 7515f6e #2 2025-12-10 16:42:30 ~32 min macos/aarch64 🍎dmg
✔️ 7515f6e #2 2025-12-10 16:47:38 ~37 min tests/ui 📄log
✔️ 7515f6e #2 2025-12-10 16:50:27 ~40 min linux/x86_64 📦tgz
✔️ 7515f6e #2 2025-12-10 16:52:43 ~42 min linux/x86_64-nwaku 📦tgz
✔️ 7515f6e pr19549 2025-12-10 17:07:59 ~17 min tests/e2e 📊rpt
✖️ ff70aed #3 2025-12-11 12:59:38 ~14 min ios/aarch64 📱ipa
ff70aed #3 2025-12-11 13:00:16 ~14 min windows/x86_64 📄log
✔️ ff70aed #3 2025-12-11 13:08:50 ~23 min macos/aarch64-nwaku 🍎dmg
240efa3 #4 2025-12-11 13:27:44 ~15 min windows/x86_64 📄log
✔️ 240efa3 #4 2025-12-11 13:39:17 ~27 min android/arm64 🤖apk 📲
240efa3 #4 2025-12-11 13:42:31 ~30 min macos/aarch64-nwaku 📄log
✖️ 240efa3 #4 2025-12-11 13:43:48 ~31 min ios/aarch64 📱ipa
✔️ 240efa3 #4 2025-12-11 13:44:18 ~32 min tests/nim 📄log
✔️ 240efa3 #4 2025-12-11 13:47:34 ~35 min macos/aarch64 🍎dmg
✔️ 240efa3 #4 2025-12-11 13:50:37 ~38 min tests/ui 📄log
✖️ b1b5809 #5 2025-12-11 14:05:24 ~14 min ios/aarch64 📱ipa
✔️ b1b5809 #5 2025-12-11 14:10:41 ~19 min macos/aarch64 🍎dmg
✔️ b1b5809 #5 2025-12-11 14:11:01 ~20 min macos/aarch64-nwaku 🍎dmg
b1b5809 #5 2025-12-11 14:11:06 ~20 min windows/x86_64 📄log
✔️ b1b5809 #5 2025-12-11 14:33:26 ~42 min android/arm64 🤖apk 📲
✔️ b1b5809 #5 2025-12-11 14:35:17 ~44 min tests/nim 📄log
✔️ b1b5809 #5 2025-12-11 14:41:06 ~50 min tests/ui 📄log
b1b5809 #5 2025-12-11 14:44:54 ~54 min linux/x86_64 📄log
✔️ b1b5809 #5 2025-12-11 14:48:03 ~57 min linux/x86_64-nwaku 📦tgz
1daf137 #6 2025-12-22 15:16:09 ~8 min macos/aarch64-nwaku 📄log
✔️ 1daf137 #6 2025-12-22 15:18:01 ~10 min android/arm64 🤖apk 📲
✔️ 1daf137 #6 2025-12-22 15:18:11 ~10 min tests/nim 📄log
✖️ 1daf137 #6 2025-12-22 15:19:11 ~11 min ios/aarch64 📱ipa
✔️ 1daf137 #6 2025-12-22 15:22:01 ~14 min macos/aarch64 🍎dmg
✔️ 1daf137 #6 2025-12-22 15:22:42 ~15 min tests/ui 📄log
✔️ 1daf137 #6 2025-12-22 15:27:33 ~20 min linux/x86_64 📦tgz
✔️ 1daf137 #6 2025-12-22 15:27:42 ~20 min linux/x86_64-nwaku 📦tgz
✔️ 1daf137 pr19549 2025-12-22 15:44:06 ~16 min tests/e2e 📊rpt
✔️ 1daf137 #6 2025-12-22 15:52:42 ~45 min windows/x86_64 💿exe
✖️ 1daf137 PR19549 2025-12-22 16:11:59 ~19 min tests/e2e-windows 📊rpt
0206c96 #7 2025-12-30 07:55:41 ~16 min android/arm64 📄log
0206c96 #7 2025-12-30 07:56:44 ~17 min macos/aarch64-nwaku 📄log
✔️ 0206c96 #7 2025-12-30 08:00:56 ~21 min tests/nim 📄log
0206c96 #7 2025-12-30 08:02:47 ~23 min ios/aarch64 📄log
✔️ 0206c96 #7 2025-12-30 08:06:09 ~26 min macos/aarch64 🍎dmg
✔️ 0206c96 #7 2025-12-30 08:06:49 ~27 min tests/ui 📄log
✔️ 0206c96 #7 2025-12-30 08:08:44 ~29 min linux/x86_64-nwaku 📦tgz
✔️ 0206c96 #7 2025-12-30 08:09:24 ~29 min linux/x86_64 📦tgz
✔️ 0206c96 #7 2025-12-30 08:13:06 ~33 min windows/x86_64 💿exe
✔️ 0206c96 pr19549 2025-12-30 08:26:13 ~16 min tests/e2e 📊rpt
✖️ 0206c96 PR19549 2025-12-30 08:36:05 ~22 min tests/e2e-windows 📊rpt
272901d #8 2025-12-30 15:50:01 ~8 min android/arm64 📄log
272901d #8 2025-12-30 15:50:41 ~8 min macos/aarch64-nwaku 📄log
272901d #8 2025-12-30 15:52:12 ~10 min ios/aarch64 📄log
✔️ 272901d #8 2025-12-30 15:53:55 ~11 min tests/nim 📄log
✔️ 272901d #8 2025-12-30 15:55:15 ~13 min tests/ui 📄log
✔️ 272901d #8 2025-12-30 15:56:20 ~14 min macos/aarch64 🍎dmg
✔️ 272901d #8 2025-12-30 16:02:33 ~20 min linux/x86_64 📦tgz
✔️ 272901d #8 2025-12-30 16:02:38 ~20 min linux/x86_64-nwaku 📦tgz
✔️ 272901d pr19549 2025-12-30 16:19:48 ~17 min tests/e2e 📊rpt
✔️ 272901d #8 2025-12-30 16:24:11 ~42 min windows/x86_64 💿exe
✖️ 272901d PR19549 2025-12-30 16:46:05 ~21 min tests/e2e-windows 📊rpt
✔️ 48b2d5c #9 2025-12-30 20:13:40 ~11 min android/arm64 🤖apk 📲
48b2d5c #9 2025-12-30 20:13:42 ~11 min macos/aarch64-nwaku 📄log
✔️ 48b2d5c #9 2025-12-30 20:16:17 ~13 min ios/aarch64 📱ipa 📲
✔️ 48b2d5c #9 2025-12-30 20:20:13 ~17 min tests/nim 📄log
✔️ 48b2d5c #9 2025-12-30 20:21:19 ~18 min macos/aarch64 🍎dmg
48b2d5c #9 2025-12-30 20:25:12 ~22 min tests/ui 📄log
✔️ 48b2d5c #9 2025-12-30 20:29:35 ~27 min linux/x86_64-nwaku 📦tgz
✔️ 48b2d5c #9 2025-12-30 20:29:47 ~27 min linux/x86_64 📦tgz
✔️ 48b2d5c #9 2025-12-30 20:34:43 ~32 min windows/x86_64 💿exe
✔️ 48b2d5c pr19549 2025-12-30 20:47:13 ~17 min tests/e2e 📊rpt
✖️ 48b2d5c PR19549 2025-12-30 20:52:03 ~17 min tests/e2e-windows 📊rpt
d087eb9 #10 2026-01-12 13:45:44 ~12 min windows/x86_64 📄log
✔️ d087eb9 #10 2026-01-12 13:53:35 ~20 min android/arm64 🤖apk 📲
d087eb9 #10 2026-01-12 13:55:46 ~22 min macos/aarch64-nwaku 📄log
✔️ d087eb9 #10 2026-01-12 13:56:28 ~23 min ios/aarch64 📱ipa 📲
✔️ d087eb9 #10 2026-01-12 13:56:32 ~23 min tests/nim 📄log
✔️ d087eb9 #10 2026-01-12 14:01:42 ~28 min tests/ui 📄log
✔️ d087eb9 #10 2026-01-12 14:04:29 ~31 min linux/x86_64-nwaku 📦tgz
✔️ d087eb9 #10 2026-01-12 14:05:25 ~32 min linux/x86_64 📦tgz
✔️ d087eb9 #10 2026-01-12 14:07:33 ~34 min macos/aarch64 🍎dmg
d087eb9 pr19549 2026-01-12 14:21:55 ~16 min tests/e2e 📄log
✔️ d087eb9 #11 2026-01-12 14:45:04 ~51 min windows/x86_64 💿exe
✖️ d087eb9 PR19549 2026-01-12 15:08:37 ~23 min tests/e2e-windows 📊rpt
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 57f91ad #11 2026-01-13 09:26:02 ~22 min ios/aarch64 📱ipa 📲
✔️ 57f91ad #11 2026-01-13 09:27:46 ~24 min android/arm64 🤖apk 📲
✔️ 57f91ad #11 2026-01-13 09:32:29 ~29 min macos/aarch64 🍎dmg
✔️ 57f91ad #11 2026-01-13 09:33:49 ~30 min tests/nim 📄log
✔️ 57f91ad #11 2026-01-13 09:37:11 ~33 min tests/ui 📄log
✔️ 57f91ad #11 2026-01-13 09:38:04 ~34 min macos/aarch64-nwaku 🍎dmg
✔️ 57f91ad #12 2026-01-13 09:41:29 ~38 min windows/x86_64 💿exe
✔️ 57f91ad #11 2026-01-13 09:43:21 ~40 min linux/x86_64 📦tgz
✔️ 57f91ad #11 2026-01-13 09:43:43 ~40 min linux/x86_64-nwaku 📦tgz
✔️ 57f91ad pr19549 2026-01-13 10:00:48 ~17 min tests/e2e 📊rpt
✖️ 57f91ad PR19549 2026-01-13 10:02:16 ~20 min tests/e2e-windows 📊rpt
✔️ 449fd86 #12 2026-01-13 10:23:19 ~25 min android/arm64 🤖apk 📲
✔️ 449fd86 #12 2026-01-13 10:27:00 ~29 min tests/nim 📄log
✔️ 449fd86 #12 2026-01-13 10:27:33 ~30 min ios/aarch64 📱ipa 📲
✔️ 449fd86 #12 2026-01-13 10:27:40 ~30 min macos/aarch64 🍎dmg
✔️ 449fd86 #12 2026-01-13 10:28:52 ~31 min macos/aarch64-nwaku 🍎dmg
✔️ 449fd86 #12 2026-01-13 10:31:45 ~34 min tests/ui 📄log
✔️ 449fd86 #12 2026-01-13 10:36:40 ~39 min linux/x86_64 📦tgz
✔️ 449fd86 #12 2026-01-13 10:36:59 ~39 min linux/x86_64-nwaku 📦tgz
✔️ 449fd86 #13 2026-01-13 10:39:07 ~41 min windows/x86_64 💿exe
✔️ 449fd86 pr19549 2026-01-13 10:54:21 ~17 min tests/e2e 📊rpt
✖️ 449fd86 PR19549 2026-01-13 11:08:35 ~29 min tests/e2e-windows 📊rpt

Copy link
Copy Markdown
Member

@caybro caybro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM in general, just some final questions

…keycard interactions

Adding a `KeycardChannelDrawer` that's guiding the user whenever the keycard is needed.

On IOS the system drawer is used
…ponents

- use a single KeycardStateDisplay instance with the necessary states
- The state queue, transitions and entire logic moved to KeycardChannelStateManager component
- Adding states for HW adaptor states
- Implement `Dismiss` action
…ing blocked

This commit updates parts of the login flows. Adds a new `Scan keycard` button to trigger keycard detection on demand.
+ Update keycard states in the login flow
+ Show digits only on soft keyboard for pin input

to squash - fix: User needs to be able to dismiss the keycard drawer without getting blocked
@glitchminer
Copy link
Copy Markdown
Contributor

glitchminer commented Jan 13, 2026

Hey @alexjba, here are some results

Samsung

Fail
Unable to unlock locked keycard (stuck on Unlocking keycard screen)

Passed
These flows could still benefit from optimisation but completed. Note that on both devices errors were found when android dev mode was enabled (similar to #19318)

  • Create profile on empty keycard - new keys
  • Create profile on empty keycard - existing keys
  • New login using keycard with existing keys
  • Login using keycard, returning user
  • Factory reset
  • Move keys from app to keycard for second account

Settings:

  • Check what’s on keycard
  • Rename keycard
  • Duplicate card
  • Change PIN

Motorola

Pass

  • Create profile on empty keycard - new keys

Settings:

  • Import from keycard

@alexjba
Copy link
Copy Markdown
Contributor Author

alexjba commented Jan 14, 2026

Hey @alexjba, here are some results

Samsung

Fail Unable to unlock locked keycard (stuck on Unlocking keycard screen)

Passed These flows could still benefit from optimisation but completed. Note that on both devices errors were found when android dev mode was enabled (similar to #19318)

  • Create profile on empty keycard - new keys
  • Create profile on empty keycard - existing keys
  • New login using keycard with existing keys
  • Login using keycard, returning user
  • Factory reset
  • Move keys from app to keycard for second account

Settings:

  • Check what’s on keycard
  • Rename keycard
  • Duplicate card
  • Change PIN

Motorola

Pass

  • Create profile on empty keycard - new keys

Settings:

  • Import from keycard

Great! Thank you very much @glitchminer! Much appreciated! 🍻 IMO the remaining issue is not a blocker and the maintenance cost of all these PRs is quite high. WDYT if we log an issue to be worked on after merging these PRs?

@glitchminer
Copy link
Copy Markdown
Contributor

@alexjba, that sounds ok, I think it would be fine to get these merged and iterate after

@alexjba alexjba merged commit 049606b into fix/keycard-nfc-3 Jan 14, 2026
11 of 12 checks passed
@alexjba alexjba deleted the fix/keycard-nfc-4 branch January 14, 2026 11:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants